package com.stary.springmvc.web.exception;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
 * 局部异常
 * @author: Guan
 **/
@Controller
public class MyExceptionHandler {

    /**
     * 解读：
     *  1.编写方法，模拟异常，算数异常
     *  2.如果我们不进行异常处理，则由tomcat默认页面显示（不太友好）
     * @param num
     * @return
     */
    @RequestMapping("/testNumEx")
    public String numException(Integer num){
        int i = num / 0;
        return "success";
    }

    /**
     * 解读：
     *  1.编写方法，处理局部异常（类中异常）
     *  2.如果本类出现异常，则先查找是否有@ExceptionHandler。
     *    再查找注解中是否标明了异常所属类（{ArithmeticException.class, NullPointerException.class}）
     *    如果有，则执行该方法
     * @param ex：生成的异常对象，可以查看异常的信息。在这里，程序员可以加入自己的业务逻辑
     * @param request：用于将异常信息放入请求域，使其他页面也能获取到异常信息
     * @return
     */
    @ExceptionHandler({ArithmeticException.class, NullPointerException.class})
    public String localException(Exception ex, HttpServletRequest request){
        System.out.println("--- 局部异常信息是 --- " + ex);
        //将异常信息放入请求域中，方便在其他页面查看
        request.setAttribute("reason",ex.getMessage());
        return "exception_mes";
    }

}
